Which test should I use? Hypothesis: Porcupines prefer certain plant genotypes over others in a common garden Hypothesis: Porcupines prefer certain plant genotypes over others in a common garden.
We visually inspected just over 2,500 trees in a common garden for evidence of herbivory on woody tissues.  Each tree was labeled with its genotype.  In our data, the one to four letter codes indicate genotype (e.g. "C," "JR," "JTCO") and the Y=#, N=# vectors indicate the proportion of herbivory within that genotype (e.g. Y=5, N=10 indicates that 5 out of 15 trees were herbivorized).
The data are not normal via a QQ plot and a Shapiro-Wilk test.  I'm unsure if my data have equal variances; Bartlett's test gives me an error (unequal number of x and g).
Here are the data, as entered in R:
Proportion of herbivory on each genotype:
C    <- c(Y = 0, N = 19)
P    <- c(Y = 0, N = 3)
BCSE <- c(Y = 1, N = 26)
BD   <- c(Y = 0, N = 2)
BWPA <- c(Y = 0, N = 34)
CALF <- c(Y = 1, N = 44)
CBQ  <- c(Y = 0, N = 81)
CCO  <- c(Y = 0, N = 55)
CR   <- c(Y = 2, N = 214)
CVC  <- c(Y = 0, N = 58)
CW   <- c(Y = 1, N = 36)
DO   <- c(Y = 1, N = 60)
FR   <- c(Y = 1, N = 18)
GR   <- c(Y = 1, N = 225)
GSM  <- c(Y = 1, N = 61)
HD   <- c(Y = 0, N = 299)
JR   <- c(Y = 16, N = 48)
JTCO <- c(Y = 0, N = 117)
JTWS <- c(Y = 0, N = 80)
KC   <- c(Y = 21, N = 88)
KIRK <- c(Y = 2, N = 75)
LM   <- c(Y = 8, N = 42)
MCO  <- c(Y = 0, N = 6)
ML   <- c(Y = 0, N = 1)
MMM  <- c(Y = 2, N = 27)
MTCR <- c(Y = 2, N = 22)
NCC  <- c(Y = 8, N = 42)
OM   <- c(Y = 0, N = 15)
OR   <- c(Y = 6, N = 52)
OV   <- c(Y = 0, N = 2)
PV   <- c(Y = 1, N = 235)
RL   <- c(Y = 0, N = 10)
SCPA <- c(Y = 0, N = 4)
SQC  <- c(Y = 0, N = 49)
SRG  <- c(Y = 0, N = 26)
SV   <- c(Y = 2, N = 48)
TPO  <- c(Y = 0, N = 83)
TRCH <- c(Y = 1, N = 20)
UTVF <- c(Y = 0, N = 18)
VEYO <- c(Y = 0, N = 80)
VRHS <- c(Y = 0, N = 64)
WINK <- c(Y = 0, N = 22)

all.genotypes <- c("C", "P",    "BCSE", "BD",   "BWPA", "CALF", "CBQ",  "CCO",  
                   "CR",    "CVC",  "CW",   "DO",   "FR",   "GR",   "GSM",  "HD",   
                   "JR",    "JTCO", "JTWS", "KC",   "KIRK", "LM",   "MCO",  "ML",   
                   "MMM",   "MTCR", "NCC",  "OM",   "OR",   "OV",   "PV",   "RL",   
                   "SCPA",  "SQC",  "SRG",  "SV",   "TPO",  "TRCH", "UTVF", "VEYO", 
                   "VRHS",  "WINK")
all.herbivory <- c(C,   P,  BCSE,   BD, BWPA,   CALF,   CBQ,    CCO,    CR, CVC,    
                   CW,  DO, FR, GR, GSM,    HD, JR, JTCO,   JTWS,   KC, KIRK,   
                   LM,  MCO,    ML, MMM,    MTCR,   NCC,    OM, OR, OV, PV, RL, 
                   SCPA,    SQC,    SRG,    SV, TPO,    TRCH,   UTVF,   VEYO,
                   VRHS,    WINK)
all.data <- data.frame(all.genotypes, all.herbivory)

ANOVA gives p < 0.05, but I don't think this is legitimate because my data are not normal.  What test should I use?
Also, am I entering my data correctly?  I want each genotype to match each vector of Y and N responses.  I previously entered calculated proportions directly instead of raw data, but had problems with that.
To clarify, we are quite sure that we've recorded damage by porcupines in particular as indicated by their presence in the garden and by the scars on the trees (characteristic diagonal climbing marks and large chew marks all the way up to the canopy of the tree - too large for the small ground squirrels present in the garden).
 A: From an R coding point of view, you have not entered the data correctly.  You can see that if you inspect your data frame using View(all.data).  The following code will fix it:  
...
all.herbivory   <- matrix(all.herbivory, ncol=2, byrow=TRUE)
all.data        <- data.frame(all.genotypes, all.herbivory)
names(all.data) <- c("genotype", "yes", "no")
head(all.data)
#   genotype yes no
# 1        C   0 19
# 2        P   0  3
# 3     BCSE   1 26
# 4       BD   0  2
# 5     BWPA   0 34
# 6     CALF   1 44

From there, a regular ANOVA is not appropriate, because your data are binomial, not normal, as you recognize.  The simplest way to test if the proportion of trees chewed on differs by tree species would be to conduct a chi-squared test.  There is one complication, which is that you have a lot of $0$s.  Those will cause some problems because a chi-squared test relies on the expected counts being large enough in each cell, but you have many that are $<1$.  Consider:  
tab <- as.table(all.herbivory)
head(chisq.test(tab)$expected)
#            A         B
# A 0.57242178 18.427578
# B 0.09038239  2.909618
# C 0.81344148 26.186559
# D 0.06025492  1.939745
# E 1.02433372 32.975666
# F 1.35573581 43.644264

The way around this is to simulate the p-value, rather than use asymptotic theory to compute the p-value.  R makes this easy for you.  You can see that it would be very unlikely to find data like yours if the null hypothesis were true:  
set.seed(4642)
chisq.test(tab, simulate.p.value=TRUE)
#   Pearson's Chi-squared test with simulated p-value (based on 2000 replicates)
# 
# data:  tab
# X-squared = 327.16, df = NA, p-value = 0.0004998

